#pragma once

#include "gui.h"
#include <string>
#include <map>
#include <list>

// Page 类，继承自 UI_Object，表示一个页面
class Page : public UI_Object
{
private:
  // 页面相关的私有数据

public:
  // 构造函数
  Page();

  // 析构函数
  ~Page();

  // 显示页面
  void show();
};

// PageItem 结构体，表示页面项
struct PageItem
{
  std::string* name;  // 页面项的名称
  Page* this_page;    // 页面项对应的页面
  PageItem* parent_page_item;  // 父页面项
  std::list<PageItem*> children;  // 子页面项列表
};

// PageManager 类，用于管理页面
class PageManager
{
private:
  PageItem* root_page_item;  // 根页面项
  std::map<std::string, PageItem*> page_map;  // 页面名称到页面项的映射
  PageItem* now_page_item;  // 当前页面项

public:
  // 构造函数
  PageManager();

  // 析构函数
  ~PageManager();

  // 添加根页面
  void add_root_page(Page* page);

  // 添加主页面
  void add_main_page(Page* page);

  // 显示页面结构
  void display_page_structure();

  // 添加子页面
  bool add_child_page(const char* parent_name, const char* child_name, Page* child_page);

  // 加载页面
  bool load_page(const char* page_name);

  // 返回上一页面
  void page_back();
};

// 全局的 PageManager 对象
extern PageManager page_manager;

// AppPage 类，继承自 Page，表示应用程序页面
class AppPage : public Page
{
private:
  Page* parent = NULL;  // 父页面

public:
  // 构造函数
  AppPage(Page* parent);

  // 析构函数
  ~AppPage();
};